package cn.sxt.logistics.controller;


import cn.sxt.logistics.pojo.*;
import cn.sxt.logistics.service.*;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单表 前端控制器
 * </p>
 *
 * @author ${author}
 * @since 2020-06-24
 */
@Controller
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private IOrderService orderService;


    @Autowired
    private IOrderDetailService orderDetailService;

    @Autowired
    private IAdminService adminService;

    @Autowired
    private ICustomerService customerService;

    @Autowired
    private IBaseDataService baseDataService;

    @RequestMapping("/orderManager")
    public String orderManager(){
        return "orderManager";
    }


    /*基础数据列表*/
    @RequestMapping("/list")
    @ResponseBody
    public ResultObject list(@RequestParam(defaultValue = "1") Integer pageNum,
                             @RequestParam(defaultValue = "10") Integer pageSize,
                             String keyword){

        //创建分页对象
        Page<Order> orderPage = new Page<>(pageNum,pageSize);

        //创建条件对象
        QueryWrapper<Order> queryWrapper = new QueryWrapper<>();

        if(StringUtils.isNotBlank(keyword)){
            queryWrapper.like("shipper_name",keyword);
        }
    
        //執行查詢
        Page<Order> result = orderService.page(orderPage, queryWrapper);


        return new ResultObject(result);
    }

    /**
     * 根据订单的id查询出订单明细数据
     * @param orderId 订单id
     * @return 订单明细集合
     */
    @RequestMapping("/detail")
    @ResponseBody
    public List<OrderDetail> detail(Long orderId){

        QueryWrapper<OrderDetail> wrapper = new QueryWrapper<>();
        //订单id查询条件
        wrapper.eq("order_id",orderId);

        List<OrderDetail> list = orderDetailService.list(wrapper);

        return list;
    }


    @RequestMapping("/orderEdit")
    public String orderEdit(Long orderId, Model m){

        /**
         * 要共享给前端页面的数据
         * 1,业务员 管理员表
         * 2,客户 客户表
         * 3,区间管理 基础数据表
         * 4，付款方式 基础数据表
         * 5，货运方式 基础数据表
         * 6，取件方式 基础数据表
         * 7，单位 基础数据表
         */
        //1,业务员 管理员表
        //创建条件对象
        QueryWrapper<Map<String,Object>> queryWrapper = new QueryWrapper<>();
        //查询所有业务员
        queryWrapper.eq("rolename","业务员");
        //执行Admin查询方法
        List<Admin> admins = adminService.selectAdmins(queryWrapper);
        //共享业务员
        m.addAttribute("admins",admins);

        //2,客户 客户表
        List<Customer> customers = customerService.list();
        //共享客户
        m.addAttribute("customers",customers);

        //3,区间管理 基础数据表
        List<BaseData> regions = baseDataService.selectBaseDatasByParentName("区间管理");
        m.addAttribute("regions",regions);
        //4，付款方式 基础数据表
        List<BaseData> payments = baseDataService.selectBaseDatasByParentName("付款方式");
        m.addAttribute("payments",payments);
        //5，货运方式 基础数据表
        List<BaseData> freights = baseDataService.selectBaseDatasByParentName("货运方式");
        m.addAttribute("freights",freights);
        //6，取件方式 基础数据表
        List<BaseData> fetchTypes = baseDataService.selectBaseDatasByParentName("取件方式");
        m.addAttribute("fetchTypes",fetchTypes);
        //7，单位 基础数据表
        List<BaseData> units = baseDataService.selectBaseDatasByParentName("单位");
        m.addAttribute("units",units);


        if(orderId !=null){
            //查询出订单基本信息
            Order order = orderService.getById(orderId);
            //查询订单明细
            QueryWrapper<OrderDetail> wrapper = new QueryWrapper<>();
            wrapper.eq("order_id",orderId);
            List<OrderDetail> orderDetails = orderDetailService.list(wrapper);

            //将订单明细设置给订单对象
            order.setOrderDetails(orderDetails);
            //共享订单对象
            m.addAttribute("order",order);
        }



        return "orderEdit";
    }

    /**
     * @RequestBody 自动将前端提交的json数据转换成对应的java对象，使用的是JackSon
     */
    @RequestMapping("/insert")
    //@RequiresPermissions("order:insert")
    @ResponseBody
    public MessageObject insert(@RequestBody  Order order){
        System.out.println("order :"+order);
        System.out.println("OrderDetail :"+order.getOrderDetails());

        boolean flag = orderService.insertOrUpdate(order);

        MessageObject mo = new MessageObject(1, "新增数据成功");
        if(!flag){
            mo = new MessageObject(0,"新增数据失败，请联系管理员");
        }
        return mo;
    }

    @RequestMapping("/update")
    //@RequiresPermissions("order:update")
    @ResponseBody
    public MessageObject update(@RequestBody  Order order){

        boolean flag = orderService.insertOrUpdate(order);

        MessageObject mo = new MessageObject(1, "修改数据成功");
        if(!flag){
            mo = new MessageObject(0,"修改数据失败，请联系管理员");
        }
        return mo;
    }
}

